using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._DataComparison
{
    /// <summary>
    /// <para>TIN Compare</para>
    /// <para>Compares two TINs and returns the comparison results.</para>
    /// <para>比较两个 TIN 并返回比较结果。</para>
    /// </summary>    
    [DisplayName("TIN Compare")]
    public class TINCompare : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public TINCompare()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_base_tin">
        /// <para>Input Base Tin</para>
        /// <para>The Input Base Tin is compared with the Input Test Tin. Input Base Tin refers to data that you have declared valid. This base data has the correct geometry, tag values (if any), and spatial reference.</para>
        /// <para>将输入基锡与输入测试锡进行比较。输入基数锡是指您声明有效的数据。此基础数据具有正确的几何、标记值（如果有）和空间参考。</para>
        /// </param>
        /// <param name="_in_test_tin">
        /// <para>Input Test Tin</para>
        /// <para>The Input Test Tin is compared against the Input Base Tin.</para>
        /// <para>将输入测试锡与输入基准锡进行比较。</para>
        /// </param>
        public TINCompare(object _in_base_tin, object _in_test_tin)
        {
            this._in_base_tin = _in_base_tin;
            this._in_test_tin = _in_test_tin;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "TIN Compare";

        public override string CallName => "management.TINCompare";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_base_tin, _in_test_tin, _compare_type.GetGPValue(), _continue_compare.GetGPValue(), _out_compare_file, _compare_status.GetGPValue()];

        /// <summary>
        /// <para>Input Base Tin</para>
        /// <para>The Input Base Tin is compared with the Input Test Tin. Input Base Tin refers to data that you have declared valid. This base data has the correct geometry, tag values (if any), and spatial reference.</para>
        /// <para>将输入基锡与输入测试锡进行比较。输入基数锡是指您声明有效的数据。此基础数据具有正确的几何、标记值（如果有）和空间参考。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Base Tin")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_base_tin { get; set; }


        /// <summary>
        /// <para>Input Test Tin</para>
        /// <para>The Input Test Tin is compared against the Input Base Tin.</para>
        /// <para>将输入测试锡与输入基准锡进行比较。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Test Tin")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_test_tin { get; set; }


        /// <summary>
        /// <para>Compare Type</para>
        /// <para><xdoc>
        ///   <para>The comparison type.</para>
        ///   <bulletList>
        ///     <bullet_item>All—This is the default.</bullet_item><para/>
        ///     <bullet_item>Properties only—Refers to both geometry and TIN tag values, if any, that are assigned to nodes and triangles.</bullet_item><para/>
        ///     <bullet_item>Spatial Reference only—Coordinate system information.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>比较类型。</para>
        ///   <bulletList>
        ///     <bullet_item>全部 - 这是默认值。</bullet_item><para/>
        ///     <bullet_item>仅属性 - 指指定给节点和三角形的几何和 TIN 标签值（如果有）。</bullet_item><para/>
        ///     <bullet_item>仅空间参考 - 坐标系信息。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Compare Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _compare_type_value _compare_type { get; set; } = _compare_type_value._ALL;

        public enum _compare_type_value
        {
            /// <summary>
            /// <para>All</para>
            /// <para>All—This is the default.</para>
            /// <para>全部 - 这是默认值。</para>
            /// </summary>
            [Description("All")]
            [GPEnumValue("ALL")]
            _ALL,

            /// <summary>
            /// <para>Properties only</para>
            /// <para>Properties only—Refers to both geometry and TIN tag values, if any, that are assigned to nodes and triangles.</para>
            /// <para>仅属性 - 指指定给节点和三角形的几何和 TIN 标签值（如果有）。</para>
            /// </summary>
            [Description("Properties only")]
            [GPEnumValue("PROPERTIES_ONLY")]
            _PROPERTIES_ONLY,

            /// <summary>
            /// <para>Spatial Reference only</para>
            /// <para>Spatial Reference only—Coordinate system information.</para>
            /// <para>仅空间参考 - 坐标系信息。</para>
            /// </summary>
            [Description("Spatial Reference only")]
            [GPEnumValue("SPATIAL_REFERENCE_ONLY")]
            _SPATIAL_REFERENCE_ONLY,

        }

        /// <summary>
        /// <para>Continue Comparison</para>
        /// <para><xdoc>
        ///   <para>Indicates whether to compare all properties after encountering the first mismatch.
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Stop after encountering the first mismatch. This is the default.  </bullet_item><para/>
        ///     <bullet_item>Checked—Compare other properties after encountering the first mismatch.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指示在遇到第一个不匹配后是否比较所有属性。
        ///   <bulletList>
        ///     <bullet_item>未选中 - 在遇到第一个不匹配后停止。这是默认设置。 </bullet_item><para/>
        ///     <bullet_item>选中 - 在遇到第一个不匹配后比较其他属性。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Continue Comparison")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _continue_compare_value _continue_compare { get; set; } = _continue_compare_value._false;

        public enum _continue_compare_value
        {
            /// <summary>
            /// <para>CONTINUE_COMPARE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CONTINUE_COMPARE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CONTINUE_COMPARE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CONTINUE_COMPARE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Compare File</para>
        /// <para>The name and path of the text file which will contain the comparison results.</para>
        /// <para>将包含比较结果的文本文件的名称和路径。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Compare File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_compare_file { get; set; } = null;


        /// <summary>
        /// <para>Compare Status</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Compare Status")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public _compare_status_value _compare_status { get; set; }

        public enum _compare_status_value
        {
            /// <summary>
            /// <para>NO_DIFFERENCES_FOUND</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_DIFFERENCES_FOUND")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DIFFERENCES_FOUND</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DIFFERENCES_FOUND")]
            [GPEnumValue("false")]
            _false,

        }

        public TINCompare SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}